package reflect;

import java.lang.reflect.Method;
import java.util.Scanner;

/**
 * java反射机制
 * 反射机制是java的动态机制，可以在程序"运行期间"再确定实例化对象，方法调用，属性操作等。
 * 反射机制可以提高代码的灵活度，但是会带来较多的系统开销和较低的运行效率，因此不能过度依赖。
 * @author XingHaiYang
 * @date 2022/9/16 9:33
 */
public class ReflectDemo1 {
    public static void main(String[] args) throws ClassNotFoundException {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入要加载的类名：");
        String className = scan.nextLine();
        Class cls = Class.forName(className);//反射加载类的第一种方式
        String name = cls.getName();//通过反射机制，获取类的完全限定名
        System.out.println(name);
        String simpleName = cls.getSimpleName();//通过反射机制，仅获取类名
        System.out.println(simpleName);
        String packageName = cls.getPackage().getName();//获取类所在包名
        System.out.println(packageName);
        Method[] methods = cls.getMethods();//获取所有公开的方法，包括从父类中继承来的
        System.out.println(methods);
        Method[] declaredMethods = cls.getDeclaredMethods();//获取本类中定义的所有方法，包括私有的
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod.getName());
        }
    }
}
